package org.example.pojo;

import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.io.Serializable;
import java.util.Date;

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("project_profile")
public class ProjectProfile implements Serializable {

    // 项目ID，主键，非空
    @NotNull(message = "项目ID不能为空")
    private Integer id;

    // 项目ID（与上面id语义可能重复？根据实际场景调整，这里假设是业务字段）
    // @NotBlank(message = "项目id不能为空")
    // private String projectId;

    // 用户openid，非空且长度限制
    @NotBlank(message = "用户openid不能为空")
    @Size(max = 50, message = "用户openid长度不能超过50")
    private String creatorOpenid;

    // 项目名，非空且长度限制
    @NotBlank(message = "项目名不能为空")
    @Size(max = 100, message = "项目名长度不能超过100")
    private String projectName;

    // 项目描述，长度限制
    @Size(max = 500, message = "项目描述长度不能超过500")
    private String projectInfo;

    // 项目方向，假设是枚举值（1-...），范围校验
    @Min(value = 1, message = "项目方向值不能小于1")
    @Max(value = 99, message = "项目方向值不能大于99") // 按需调整最大值
    private Integer direction;

    // 人数，非负
    @Min(value = 0, message = "人数不能小于0")
    private Integer memberCount;

    // 能否跨校，假设是枚举（1可以，2不可以），范围校验
    @Min(value = 1, message = "跨校标识值不能小于1")
    @Max(value = 2, message = "跨校标识值不能大于2")
    private Integer crossSchool;

    // 学历要求，假设是枚举（1大专，2本科...），范围校验
    @Min(value = 1, message = "学历要求值不能小于1")
    @Max(value = 9, message = "学历要求值不能大于9") // 按需调整
    private Integer educationRequirement;

    // 技能要求废弃字段，标记为null时无需校验，若有值可加@Deprecated+长度校验
    @Deprecated
    private String skillsSummary;

    // 详细要求，长度限制
    @Size(max = 500, message = "详细要求长度不能超过500")
    private String skillDetails;

    // 创建时间，日期格式校验（若需要严格格式可自定义校验）
    //接受时间格式为yyyy-MM-dd HH:mm:ss
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @PastOrPresent(message = "创建时间不能为未来时间")
    private Date createdAt;

    // 更新时间，日期格式校验
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @PastOrPresent(message = "更新时间不能为未来时间")
    private Date updatedAt;

    // 是否邮件推广，布尔值校验
    @AssertTrue(message = "是否邮件推广值只能为true/false")
    private Boolean emailPromotion;

    // 浏览量，非负
    @Min(value = 0, message = "浏览量不能小于0")
    private Integer lookcount;

    // 申请人数，非负
    @Min(value = 0, message = "申请人数不能小于0")
    private Integer applicationCount;

    // 是否学习能力强，布尔值校验
    @AssertTrue(message = "是否学习能力强值只能为true/false")
    private Boolean study;

    // 推广状态，假设是枚举（0未推广，1已推广，2推广中），范围校验
    @Min(value = 0, message = "推广状态值不能小于0")
    @Max(value = 2, message = "推广状态值不能大于2")
    private Integer emailPromotionStatus;
}